ईएस मॉड्यूल का परिचय
ईएस मॉड्यूल (ईएसएम) पुन: उपयोग के लिए जावास्क्रिप्ट कोड की पैकेजिंग के लिए आधिकारिक मानक प्रारूप हैं।
इसे ES6 (ES2015) में पेश किया गया था और अब यह Node.js में समर्थित है।
ES मॉड्यूल से पहले, Node.js विशेष रूप से CommonJS मॉड्यूल प्रारूप (आवश्यकता/निर्यात) का उपयोग करता था।
अब डेवलपर्स अपनी परियोजना की जरूरतों के आधार पर कॉमनजेएस और ईएस मॉड्यूल के बीच चयन कर सकते हैं।
संरचित वाक्यविन्यास
CommonJS की तुलना में उन्नत वास्तुकला
स्थैतिक विश्लेषण
मानक विश्लेषण योग्य ब्लॉक
वृक्ष-हिलना
छोटी संरचनाओं के लिए लकड़ी-हिलाने वाला समर्थन
कॉमनजेएस बनाम ईएस मॉड्यूल
यहां बताया गया है कि CommonJS और ES मॉड्यूल कैसे भिन्न हैं:
| विशेषता | CommonJS | ईएस मॉड्यूल |
|---|---|---|
| फाइल एक्सटेंशन | .js (डिफ़ॉल्ट) | .mjs (या उचित कॉन्फ़िगरेशन के साथ .js) |
| सिंटैक्स आयात करें | require() | import |
| निर्यात सिंटैक्स | module.exports / exports | export / export default |
| आयात समय | गतिशील (रन टाइम) | स्थिर (ऑपरेशन से पहले पार्स किया गया) |
| उच्च स्तर की प्रतीक्षा है | समर्थित नहीं | समर्थित है |
| आयात में फ़ाइल URL | आवश्यक नहीं | स्थानीय फ़ाइलों के लिए आवश्यक |
उदाहरण: कॉमनजेएस मॉड्यूल
// math.js (CommonJS)
function add(a, b) {
return a + b;
}
function subtract(a, b) {
return a - b;
}
module.exports = {
add,
subtract
};
// app.js (CommonJS)
const math = require('./math');
console.log(math.add(5, 3)); // 8
उदाहरण: ईएस मॉड्यूल
// math.mjs (ES Module)
export function add(a, b) {
return a + b;
}
export function subtract(a, b) {
return a - b;
}
// app.mjs (ES Module)
import { add, subtract } from './math.mjs';
console.log(add(5, 3)); // 8
ईएस मॉड्यूल चलाना
Node.js ES :
1. .mjs फ़ाइल एक्सटेंशन का उपयोग करना
अपनी फ़ाइलों के लिए .mjs एक्सटेंशन का उपयोग करना सबसे आसान तरीका है।
Node.js ES .
2. package.json में "type": "module" सेट करना
सामान्य .js फ़ाइलों के साथ ES मॉड्यूल का उपयोग करने के लिए, अपने package.json में निम्नलिखित जोड़ें:
{
"name": "my-package",
"version": "1.0.0",
"type": "module"
}
3. --input-type=मॉड्यूल ध्वज का उपयोग करना
सीधे नोड कमांड के साथ चलने वाली स्क्रिप्ट के लिए, आप मॉड्यूल सेटिंग निर्दिष्ट कर सकते हैं:
node --input-type=module script.js
नोट:
यदि आप ऐसे कोडबेस के साथ काम कर रहे हैं जो मुख्य रूप से CommonJS का उपयोग करता है और फ़ाइल में ES मॉड्यूल का उपयोग करना चाहते हैं, तो .mjs एक्सटेंशन का उपयोग करना अधिक पारदर्शी और कम त्रुटि-प्रवण दृष्टिकोण है।
आयात और निर्यात सिंटैक्स
ईएस मॉड्यूल कॉमनजेएस की तुलना में कोड आयात और निर्यात करने के लिए अधिक लचीले तरीके प्रदान करते हैं।
निर्यात सिंटैक्स
नाम दिया गया एक्सपोर्ट्स
// Multiple named exports
export function sayHello() {
console.log('Hello');
}
export function sayGoodbye() {
console.log('Goodbye');
}
// Alternative: export list at the end
function add(a, b) {
return a + b;
}
function subtract(a, b) {
return a - b;
}
export { add, subtract };
डिफ़ॉल्ट निर्यात
// Only one default export per module
export default function() {
console.log('I am the default export');
}
// Or with a named function/class/object
function mainFunction() {
return 'Main functionality';
}
export default mainFunction;
सिंटैक्स आयात करें
नामित निर्यात आयात करना
// Import specific named exports
import { sayHello, sayGoodbye } from './greetings.mjs';
sayHello(); // Hello
// Rename imports to avoid naming conflicts
import { add as sum, subtract as minus } from './math.mjs';
console.log(sum(5, 3)); // 8
// Import all named exports as an object
import * as math from './math.mjs';
console.log(math.add(7, 4)); // 11
डिफ़ॉल्ट और नामित निर्यात आयात करना
// Import both default and named exports
import main, { VERSION } from './main.mjs';
console.log(VERSION); // 1.0.0
main(); // Main function
गतिशील आयात
ईएस मॉड्यूल गतिशील आयात का समर्थन करते हैं, जो आपको सशर्त या मांग पर मॉड्यूल लोड करने की अनुमति देता है।
उदाहरण: गतिशील आयात
// app.mjs
async function loadModule(moduleName) {
try {
// Dynamic import returns a promise
const module = await import(`./${moduleName}.mjs`);
return module;
} catch (error) {
console.error(`Failed to load ${moduleName}:`, error);
}
}
// Load a module based on a condition
const moduleName = process.env.NODE_ENV === 'production' ? 'prod' : 'dev';
loadModule(moduleName).then(module => {
module.default(); // Call the default export
});
// Or with simpler await syntax
(async () => {
const mathModule = await import('./math.mjs');
console.log(mathModule.add(10, 5)); // 15
})();
उदाहरण:
गतिशील आयात कोड-विभाजन, आलसी-लोडिंग मॉड्यूल या रनटाइम स्थितियों के आधार पर सशर्त रूप से लोडिंग मॉड्यूल के लिए बहुत अच्छे हैं।
उच्च स्तर की प्रतीक्षा है
कॉमनजेएस के विपरीत, ईएस मॉड्यूल शीर्ष-स्तरीय प्रतीक्षा का समर्थन करते हैं, जो आपको मॉड्यूल स्तर पर एसिंक फ़ंक्शंस के बाहर प्रतीक्षा का उपयोग करने की अनुमति देता है।
उदाहरण: अप-लेवल प्रतीक्षा
// data-loader.mjs
// This would cause an error in CommonJS or in a script
// But works at the top level in an ES Module
console.log('Loading data...');
// Top-level await - the module's execution pauses here
const response = await fetch('https://jsonplaceholder.typicode.com/todos/1');
const data = await response.json();
console.log('Data loaded!');
export { data };
// When another module imports this one, it will only get the exports
// after all the top-level await operations have completed
कॉन्फ़िगरेशन लोड हो रहा है
फ़ाइलों या दूरस्थ स्रोतों से कॉन्फ़िगरेशन लोड हो रहा है
डेटाबेस कनेक्शन
कार्यक्षमता निर्यात करने से पहले डेटाबेस से कनेक्ट करना
बैच आरंभीकरण
सशर्त आयात या बैच आरंभीकरण
सर्वोत्तम अभ्यास
Node.js ES , :
1. फ़ाइल एक्सटेंशन के बारे में स्पष्ट रहें
स्थानीय फ़ाइलों के लिए हमेशा अपने आयात विवरण में फ़ाइल एक्सटेंशन जोड़ें:
// Good
import { someFunction } from './utils.mjs';
// Bad - might not work depending on configuration
import { someFunction } from './utils';
2. फ़ाइल प्रतीकों का सही ढंग से उपयोग करें
फ़ाइल आयात के लिए, Index.mjs फ़ाइलें बनाएं:
// utils/index.mjs
export * from './string-utils.mjs';
export * from './number-utils.mjs';
// app.mjs
import { formatString, add } from './utils/index.mjs';
3. सही निर्यात शैली का चयन करें
एकाधिक फ़ंक्शन/मानों के लिए नामित निर्यात का उपयोग करें और महत्वपूर्ण फ़ंक्शन के लिए डिफ़ॉल्ट निर्यात का उपयोग करें:
// For libraries with many utilities, use named exports
export function validate() { /* ... */ }
export function format() { /* ... */ }
// For components or classes that are the primary export
export default class UserService { /* ... */ }
Node.js :
ES मॉड्यूल Node.js v12 में पूरी तरह से समर्थित हैं, v14+ में बेहतर समर्थन के साथ। पुराने संस्करणों के लिए, आपको बैबेल जैसे दुभाषिया की आवश्यकता हो सकती है।
सारांश
.एमजेएस एक्सटेंशन
ईएस मॉड्यूल चलाने का आसान तरीका
सिंटैक्स आयात करें
स्थैतिक विश्लेषण और वृक्ष-हिलाना
गतिशील आयात
सशर्त ब्लॉक लोड हो रहा है
उच्च स्तर की प्रतीक्षा है
बैच मोड में प्रत्यक्ष प्रतीक्षा समर्थन
महत्वपूर्ण बिंदु:
- ईएस मॉड्यूल आधुनिक जावास्क्रिप्ट मॉड्यूल मानक हैं
- CommonJS की तुलना में निश्चित पार्सिंग और ट्री-शेकिंग समर्थन
- कोड-विभाजन के लिए गतिशील आयात बहुत अच्छे हैं
- शीर्ष-स्तरीय प्रतीक्षा मॉड्यूल आरंभीकरण को सरल बनाता है
- फ़ाइल एक्सटेंशन और निर्यात शैलियों पर स्पष्ट रहें
अभ्यास
सही कीवर्ड चुनें.
ईएस मॉड्यूल अन्य मॉड्यूल लोड करते हैं______कुंजी शब्द का प्रयोग करें.